$(document).ready(function() {
	createMenuEffects();	
	createLoginDialog();
	checkRegister();
	checkLogin();
	reloadAccessCode();
});

// function to reload access code
function reloadAccessCode() {
	$('#reload_code').click(function(){
		$('#image1245a').attr('src', 'register/get_captcha?cache=' + new Date().getTime());	
		return false;
	});
}

// function to check login before sending to server
function checkLogin() {
	$('#login').click(function() {
		// clear old errors if exist
		$('#login_form p > span.error').remove();
		return validateLogin();
	});	
	
	$('#login_page_button').click(function() {
		$('#login_page p > span.error').remove();
		return validateLogin();		
	});
}

// function to check register before sending to server
function checkRegister() {
	$('#register').click(function() {
		// clear old errors if exist
		$('#register_form p > span.error').remove();
		return validateRegister();
	});	
}

//Validate the register form
//return true if everything is ok
function validateRegister() {
	return checkRequiredFields();
}

//Validate the login form
//return true if everything is ok
function validateLogin() {
	return requireField('#login_username', 'Vui lòng nhập tên đăng nhập');
}

//validate value using regular expression
function regularValidate(field_id, pattern, message) {
	if(!pattern.test($(field_id).val())) {
		$('<span class="error">' + message + '</span>').insertAfter(field_id);
		return false;
	}
	return true;
}

// Function to check all required fields to make sure that they are not empty
function checkRequiredFields() {
	var email_pattern = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
	// if everything is ok then return true
	var is_valid = requireField('#fullname', 'Vui lòng nhập đầy đủ họ và tên') // validate fullname
	& (requireField('#email', 'Vui lòng nhập địa chỉ email') && regularValidate('#email', email_pattern, 'Địa chỉ email không đúng')) // validate email
	& requireField('#address', 'Vui lòng nhập địa chỉ liên lạc') // validate address
	& requireField('#phone', 'Vui lòng nhập số điện thoại') // validate phone
	& requireField('#username', 'Vui lòng nhập tên đăng nhập') // validate username
	& (requireField('#password', 'Vui lòng nhập mật khẩu') && // validate password
	 requireField('#repassword', 'Vui lòng nhập lại mật khẩu') &&  comparePasswordFields('#password', '#repassword')) // validate repassword
	& checkAccessCode() // validate access code
	;
	return is_valid == 1; 	
}


// check access code
// return false access is empty or wrong
function checkAccessCode() {
	if(jQuery.trim($('#accesscode').val()).length == 0) {
		$('<span class="error" style="padding-left: 0;"> Vui lòng nhập mã bảo vệ</span>').insertAfter('#reload_code');
		return false;
	} else {
		var check = true;
		$.ajax({
			url : 'register/check_access_code',
			type : 'post',
			data : 'accesscode=' + $('#accesscode').val(),
			dateType : 'html',
			async : false,
			error: function() {
				alert('Error: cannot retrieve value!');
			},
			
			success : function(data) {
				if(data == 'wrong') {
					$('<span class="error" style="padding-left: 0;"> Mã bảo vệ không đúng</span>')
					.insertAfter('#reload_code');
					check = false;
				} else check = true;
			}
		});
		return check;	
	}
}

// compare password and re-password
// return true if they are exactly the same
function comparePasswordFields(password_id, repassword_id) {
	if($(password_id).val() != $(repassword_id).val()) {
		$('<span class="error">Hai mật khẩu không khớp nhau</span>').insertAfter(repassword_id);
		$(repassword_id).val(''); 
		return false;
	}
	return true;
}

// Function to check whether field is empty or not.
// This function requires 2 inputs. They are field id and error message
// It will assign error message and return false if the field is empty
function requireField(field_id, message) {
	if(jQuery.trim($(field_id).val()).length == 0) {
		$('<span class="error">' + message + '</span>').insertAfter(field_id);
		return false;
	}
	return true;
}

// Create dialog for user register
function createLoginDialog() {
	//Create dialog
	var $dialog = $('#login_form').dialog({autoOpen : false, title : 'Register Dialog', position : 'center', resizable : false, width : 480, height : 300 });	
	//Fix position of dialog when scrolling window
	$(window).scroll(function() {$dialog.dialog('option', 'position', 'center');});
	//Show dialog when user click register button
	$('#loginbtn').click(function() {$dialog.dialog('open'); return false;});
}

function createMenuEffects() {
    if($.browser.msie)
	menuEffectsForIE();
    else menuEffects();
}

function menuEffects() {
        $('#main_menu li ul').css({'position': 'absolute', 'display' : 'none'});
                    
        $('#main_menu li').hoverIntent(function() {
	    var leftBase = $('#nav_wrapper').offset().left;
        var ulist = $(this).find('ul');
	    var left = 0;
	    var lenofItem = $(this).find('ul.sub_menu li').length;
	    
	    if(ulist.parent().offset() != null){
		if(lenofItem == 1)
		    left = ulist.parent().offset().left;
		else left = (ulist.parent().offset().left + leftBase) / 2 ;
	    }
	    left = (left > leftBase ) ? left : (leftBase + 1);
	    ulist
	    .stop(true, true)
	    .css({'position': 'absolute', 'left' : left})
	    .slideDown('fast');
	    
        }, function() {
            $(this).find('ul')
            .stop(true, true)
	    .delay(400)
            .fadeOut('fast');
        });
}

function menuEffectsForIE() {
		$('#main_menu li ul').css({
			'display' : 'none'
		});
		$('#main_menu > li').hoverIntent(function() {
			var leftBase = $('#nav_wrapper').offset().left;
			var ulist = $(this).find('ul');
			var left = 0;
			var lenofItem = $(this).find('ul.sub_menu li').length;    
			
			if(ulist.parent().offset() != null) {
				if(lenofItem == 1)
					left = ulist.parent().offset().left;
				else left = (ulist.parent().offset().left + leftBase) / 2 ;
				left = (left > leftBase ) ? left : (leftBase + 1);
				if(parseInt($.browser.version, 10) <= 6) {
					ulist
					.stop(true, true)
					.css({
					'left' : left ,
					'margin' : '25px 0 0 0',
					'width' : '800px'
					})
					.slideDown('fast');
				}
				else {
					ulist
					.stop(true, true)
					.css({'position': 'absolute', 'left' : left})
					.slideDown('fast');
				}
			}
		}
		, function() {
        $(this).find(' > ul')
        .stop(true, true)
	    .delay(400)
        .fadeOut('fast');
    });		
}